home *** CD-ROM | disk | FTP | other *** search
- // TSMorph - Amiga Morphing program
- // Copyright (C) © 1993 Topicsave Limited
-
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // any later version.
-
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
-
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- // mpaddock@cix.compulink.co.uk
-
- // include precompiled headers (if not already)
- #ifndef TSMORPH_H
- #include "TSMorph.h"
- #endif
-
- /* Remove menus from all windows allowing
- * them to be updated
- */
- void
- RemoveMenus(void) {
- if (TSMorphWnd) {
- ClearMenuStrip(TSMorphWnd);
- }
- if (ControlWindow) {
- ClearMenuStrip(Pic1.Win);
- ClearMenuStrip(Pic2.Win);
- ClearMenuStrip(ControlWindow);
- }
- }
-
- /* Add the menus back again after
- * calling RemoveMenus() and updating
- */
- void
- AddMenus(void) {
- if (TSMorphWnd) {
- ResetMenuStrip(TSMorphWnd,TSMorphMenus);
- }
- if (ControlWindow) {
- ResetMenuStrip(ControlWindow,MyMenu);
- ResetMenuStrip(Pic1.Win,MyMenu);
- ResetMenuStrip(Pic2.Win,MyMenu);
- }
- }
-
- /* Update the save format menu items
- * Parameter: remove - set to TRUE to remove and add the menus
- * to FALSE if menus have already been removed (for lots of updates)
- */
- void
- UpdateSaveFormat(BOOL remove) {
- if (remove) {
- RemoveMenus();
- }
- if (TSMorphWnd) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_ILBM24)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24T)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24F)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_OPAL24FT)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_JPEG)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_JPEGT)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_PBM)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_BW16)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_BW256)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_HAM6)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_HAM8)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_DCTV3)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,MI_DCTV4)))->Flags &= ~CHECKED;
- }
- if (ControlWindow) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_ILBM24)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24T)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24F)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_OPAL24FT)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_JPEG)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_JPEGT)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_PBM)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_BW16)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_BW256)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_HAM6)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_HAM8)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_DCTV3)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,MI_DCTV4)))->Flags &= ~CHECKED;
- }
- if (TSMorphWnd) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_SAVEFORMAT,SaveFormat)))->Flags |= CHECKED;
- }
- if (ControlWindow) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_SAVEFORMAT,SaveFormat)))->Flags |= CHECKED;
- }
- if (remove) {
- AddMenus();
- }
- }
-
- /* Update the render mode menu items
- * see UpdateSaveFormat() for parameter
- */
- void
- UpdateRenderMode(BOOL remove) {
- if (remove) {
- RemoveMenus();
- }
- if (TSMorphWnd) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE1)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE2)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE4)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE8)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE16)))->Flags &= ~CHECKED;
- }
- if (ControlWindow) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE1)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE2)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE4)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE8)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE16)))->Flags &= ~CHECKED;
- }
- if (TSMorphWnd) {
- if (RenderMode & 1) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE1)))->Flags |= CHECKED;
- }
- if (RenderMode & 2) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE2)))->Flags |= CHECKED;
- }
- if (RenderMode & 4) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE4)))->Flags |= CHECKED;
- }
- if (RenderMode & 8) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE8)))->Flags |= CHECKED;
- }
- if (RenderMode & 16) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE16)))->Flags |= CHECKED;
- }
- }
- if (ControlWindow) {
- if (RenderMode & 1) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE1)))->Flags |= CHECKED;
- }
- if (RenderMode & 2) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE2)))->Flags |= CHECKED;
- }
- if (RenderMode & 4) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE4)))->Flags |= CHECKED;
- }
- if (RenderMode & 8) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE8)))->Flags |= CHECKED;
- }
- if (RenderMode & 16) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_RENDERMODE,MI_MODE16)))->Flags |= CHECKED;
- }
- }
- if (remove) {
- AddMenus();
- }
- }
-
- /* Update the open mode menu items
- * see UpdateSaveFormat() for parameter
- */
- void
- UpdateOpenMode(BOOL remove) {
- if (remove) {
- RemoveMenus();
- }
- if (TSMorphWnd) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_ALWAYS)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_IFILBM)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_IFCOLOURS)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_REMAP)))->Flags &= ~CHECKED;
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,MI_OPAL)))->Flags &= ~CHECKED;
- }
- if (ControlWindow) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_ALWAYS)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_IFILBM)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_IFCOLOURS)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_REMAP)))->Flags &= ~CHECKED;
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,MI_OPAL)))->Flags &= ~CHECKED;
- }
- if (TSMorphWnd) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_OPENMODE,OpenMode)))->Flags |= CHECKED;
- }
- if (ControlWindow) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,MM_OPENMODE,OpenMode)))->Flags |= CHECKED;
- }
- if (remove) {
- AddMenus();
- }
- }
-
- /* UnZoom the image windows
- * i.e. currently displayed 2x and
- * want to display 1x
- */
- void
- UnZoom(void) {
- // Already zoomed - set number of windows resized (change window box may not work)
- // see the main loop on how the messages are then handled
- changedboxcount = 0;
- // Copy image 1 to superbitmap and resync
- BltBitMap(Pic1.ilbm->brbitmap,0,0,&(Pic1.BitMap),0,0,Pic1.ilbm->Bmhd.w,Pic1.ilbm->Bmhd.h,0xC0,0xff,NULL);
- LockLayerRom(Pic1.Win->RPort->Layer);
- CopySBitMap(Pic1.Win->RPort->Layer);
- UnlockLayerRom(Pic1.Win->RPort->Layer);
- /* Resize gadgets and window (if too big)
- * Window limits are reset and points
- * redrawn with IDCMP_CHANGEWINDOW
- */
- SetGadgetAttrs(Pic1.BotGad, Pic1.Win, NULL,
- PGA_Total, Pic1.ilbm->Bmhd.w,
- TAG_END);
- SetGadgetAttrs(Pic1.SideGad, Pic1.Win, NULL,
- PGA_Total, Pic1.ilbm->Bmhd.h,
- TAG_END);
- ChangeWindowBox(Pic1.Win,Pic1.Win->LeftEdge,Pic1.Win->TopEdge,
- min(Pic1.Win->Width,Pic1.ilbm->Bmhd.w+Pic1.Screen->WBorLeft+SIZEIMAGE_W(n)),
- min(Pic1.Win->Height,Pic1.ilbm->Bmhd.h+Pic1.Screen->WBorTop + Pic1.Screen->Font->ta_YSize+1+SIZEIMAGE_H(n)));
- // Do the same of image/window2
- BltBitMap(Pic2.ilbm->brbitmap,0,0,&(Pic2.BitMap),0,0,Pic2.ilbm->Bmhd.w,Pic2.ilbm->Bmhd.h,0xC0,0xff,NULL);
- LockLayerRom(Pic2.Win->RPort->Layer);
- CopySBitMap(Pic2.Win->RPort->Layer);
- UnlockLayerRom(Pic2.Win->RPort->Layer);
- SetGadgetAttrs(Pic2.BotGad, Pic2.Win, NULL,
- PGA_Total, Pic2.ilbm->Bmhd.w,
- TAG_END);
- SetGadgetAttrs(Pic2.SideGad, Pic2.Win, NULL,
- PGA_Total, Pic2.ilbm->Bmhd.h,
- TAG_END);
- ChangeWindowBox(Pic2.Win,Pic2.Win->LeftEdge,Pic2.Win->TopEdge,
- min(Pic2.Win->Width,Pic2.ilbm->Bmhd.w+Pic2.Screen->WBorLeft+SIZEIMAGE_W(n)),
- min(Pic2.Win->Height,Pic2.ilbm->Bmhd.h+Pic2.Screen->WBorTop + Pic2.Screen->Font->ta_YSize+1+SIZEIMAGE_H(n)));
- // Wait till its all done (why?) and reset Zoom
- WaitBlit();
- Zoom = 0;
- }
-
- /* Zoom the image windows
- * i.e. currently displayed 1x and
- * want to display 2x
- */
- void
- ReZoom(void) {
- /* Currently normal size
- * scale image 1, set window max size
- * redo gadgets and copy to superbitmap
- */
- BitMapScale(&(Pic1.BitScaleArgs));
- WindowLimits(Pic1.Win,0,0,(Pic1.ilbm->Bmhd.w<<1)+Pic1.Screen->WBorLeft+SIZEIMAGE_W(n),
- (Pic1.ilbm->Bmhd.h<<1)+Pic1.Screen->WBorTop + Pic1.Screen->Font->ta_YSize+1+SIZEIMAGE_H(n));
- SetGadgetAttrs(Pic1.BotGad, Pic1.Win, NULL,
- PGA_Total, Pic1.ilbm->Bmhd.w<<1,
- TAG_END);
- SetGadgetAttrs(Pic1.SideGad, Pic1.Win, NULL,
- PGA_Total, Pic1.ilbm->Bmhd.h<<1,
- TAG_END);
- LockLayerRom(Pic1.Win->RPort->Layer);
- CopySBitMap(Pic1.Win->RPort->Layer);
- UnlockLayerRom(Pic1.Win->RPort->Layer);
- // Same for image 2
- BitMapScale(&(Pic2.BitScaleArgs));
- WindowLimits(Pic2.Win,0,0,(Pic2.ilbm->Bmhd.w<<1)+Pic2.Screen->WBorLeft+SIZEIMAGE_W(n),
- (Pic2.ilbm->Bmhd.h<<1)+Pic2.Screen->WBorTop + Pic2.Screen->Font->ta_YSize+1+SIZEIMAGE_H(n));
- SetGadgetAttrs(Pic2.BotGad, Pic2.Win, NULL,
- PGA_Total, Pic2.ilbm->Bmhd.w<<1,
- TAG_END);
- SetGadgetAttrs(Pic2.SideGad, Pic2.Win, NULL,
- PGA_Total, Pic2.ilbm->Bmhd.h<<1,
- TAG_END);
- LockLayerRom(Pic2.Win->RPort->Layer);
- CopySBitMap(Pic2.Win->RPort->Layer);
- UnlockLayerRom(Pic2.Win->RPort->Layer);
- /* Reset Zoom, Check new size gadgets,
- * and redraw all the points
- */
- Zoom = 1;
- doNewSize(&Pic1);
- doNewSize(&Pic2);
- DrawAllPoints();
- }
-
- /* switch the check mark of a settings menu item
- * Parameters: pos position in the settings menu
- * settings TRUE or FALSE
- * remove remove and add menus? see UpdateSaveFormat()
- */
- void
- SwitchMenuItem(UWORD pos,BOOL setting,BOOL remove) {
- if (remove) {
- RemoveMenus();
- }
- if (TSMorphWnd) {
- if (setting) {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,pos,NOSUB)))->Flags |= CHECKED;
- }
- else {
- (ItemAddress(TSMorphMenus,FULLMENUNUM(1,pos,NOSUB)))->Flags &= ~CHECKED;
- }
- }
- if (ControlWindow) {
- if (setting) {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,pos,NOSUB)))->Flags |= CHECKED;
- }
- else {
- (ItemAddress(MyMenu,FULLMENUNUM(M_SETTINGS,pos,NOSUB)))->Flags &= ~CHECKED;
- }
- }
- if (remove) {
- AddMenus();
- }
- }
-
- /* Handle Settings menu messages
- * Parameters: Selection the item number
- * pic the current picture
- */
- void
- HandleSettings(UWORD Selection,struct Picture *pic) {
- ULONG OZoom; // The old zoom mode
- // switch on the selection
- switch(ITEMNUM(Selection)) {
- case MM_ICONS:
- // Toggle Create Icons?
- CreateIcons = !CreateIcons;
- SwitchMenuItem(MM_ICONS,CreateIcons,TRUE);
- break;
- case MM_PALETTE:
- // Toggle Change Palette? - Uncolor the current image if we have one
- if (palette && pic) {
- UnColorWindow(pic);
- }
- palette = !palette;
- SwitchMenuItem(MM_PALETTE,palette,TRUE);
- break;
- case MM_ZOOM:
- // Toggle Zoom?
- if (ControlWindow) {
- // UnZoom or ReZoom the images if open
- DisableWindows(DI_Zoom);
- if (Zoom) {
- UnZoom();
- }
- else {
- ReZoom();
- }
- EnableWindows();
- }
- else {
- if (Zoom) {
- Zoom = 0;
- }
- else {
- Zoom = 1;
- }
- }
- SwitchMenuItem(MM_ZOOM,Zoom,TRUE);
- break;
- case MM_OPENMODE:
- // Set new open mode
- OpenMode = SUBNUM(Selection);
- UpdateOpenMode(TRUE);
- break;
- case MM_SCREEN:
- // Get public screen name
- GetAString("Public Screen",ScreenName,H_P_PS);
- break;
- case MM_CUSTOM:
- // Get custom screen mode
- GetAString("Custom Screen Mode",CustomName,H_PCUSTM);
- break;
- case MM_CDEPTH:
- // Get custom screen depth
- GetANumber("Custom Screen Depth",&CustomDepth,H_PCUSTD);
- break;
- case MM_SPREVIEW:
- // Get preview script
- GetAString("Preview Script",PreviewScript,H_P_Preview);
- break;
- case MM_ICONSP:
- // Toggle Create prefs Icons?
- CreateIconsP = !CreateIconsP;
- SwitchMenuItem(MM_ICONSP,CreateIconsP,TRUE);
- break;
- case MM_KEEPS:
- // Toggle Keep Settings?
- KeepSettings = !KeepSettings;
- SwitchMenuItem(MM_KEEPS,KeepSettings,TRUE);
- case MM_LOADS:
- // Load new settings from requester
- LoadSettings(NULL);
- break;
- case MM_SAVES:
- // Save settings to ENV: and ENVARC:
- SaveSettings("ENVARC:TSMorph/TSMorph.prefs");
- SaveSettings("ENV:TSMorph/TSMorph.prefs");
- break;
- case MM_SAVESAS:
- // save settings from requester
- SaveSettings(NULL);
- break;
- case MM_ICONSR:
- // Toggle Create render Icons?
- CreateIconsR = !CreateIconsR;
- SwitchMenuItem(MM_ICONSR,CreateIconsR,TRUE);
- break;
- case MM_DX:
- // Get DX
- GetANumber("DX",&DX,H_P_DX);
- break;
- case MM_DY:
- // Get DY
- GetANumber("DY",&DY,H_P_DY);
- break;
- case MM_LOADSCRIPT:
- // Get load script
- GetAString("Load Script",LoadScript,H_P_LS);
- break;
- case MM_PRESCRIPT:
- // Get pre script
- GetAString("Pre Script",PreScript,H_P_PES);
- break;
- case MM_POSTSCRIPT:
- // Get post script
- GetAString("Post Script",PostScript,H_P_POS);
- break;
- case MM_DEPTH:
- // Get depth
- GetANumber("Depth",&Depth,H_P_DE);
- break;
- case MM_RENDERMODE:
- // Set new render mode
- RenderMode = 0;
- if ((ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE1)))->Flags & CHECKED) {
- RenderMode |= 1;
- }
- if ((ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE2)))->Flags & CHECKED) {
- RenderMode |= 2;
- }
- if ((ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE4)))->Flags & CHECKED) {
- RenderMode |= 4;
- }
- if ((ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE8)))->Flags & CHECKED) {
- RenderMode |= 8;
- }
- if ((ItemAddress(TSMorphMenus,FULLMENUNUM(1,MM_RENDERMODE,MI_MODE16)))->Flags & CHECKED) {
- RenderMode |= 16;
- }
- UpdateRenderMode(TRUE);
- break;
- case MM_SAVEFORMAT:
- // Set new save format
- SaveFormat = SUBNUM(Selection);
- UpdateSaveFormat(TRUE);
- break;
- case MM_QUALITY:
- // Get quality
- GetANumber("Quality",&Quality,H_P_QU);
- break;
- case MM_SCREENR:
- // Get render public screen
- GetAString("Render Screen",ScreenNameR,H_P_PSR);
- break;
- case MM_ANTIALIAS:
- // Toggle Anti-Alias?
- AntiAlias = !AntiAlias;
- SwitchMenuItem(MM_ANTIALIAS,AntiAlias,TRUE);
- break;
- case MM_INTEGER:
- // Toggle Integer?
- Integer = !Integer;
- SwitchMenuItem(MM_INTEGER,Integer,TRUE);
- break;
- case MM_RESETD:
- // Reset to default prefs
- OZoom = Zoom; // keep current zoom
- if (!ControlWindow) {
- // if the images are open then we can not change these
- PaletteAllowed = TRUE;
- ZoomAllowed = TRUE;
- }
- // Set all other settings to defaults
- ScreenName[0] = 0;
- ScreenNameR[0] = 0;
- CreateIcons = TRUE;
- CreateIconsR = FALSE;
- CreateIconsP = TRUE;
- KeepSettings = TRUE;
- if (PaletteAllowed) {
- palette = TRUE;
- }
- else {
- palette = FALSE;
- }
- Zoom = 0;
- OpenMode = OPEN_ILBM_IF_COLOURS;
- SaveFormat = MI_ILBM24;
- Quality = 75;
- strcpy(PreScript,"Rexx/Prescript");
- strcpy(PostScript,"Rexx/Postscript");
- strcpy(LoadScript,"Rexx/Loadscript");
- strcpy(PreviewScript,"Rexx/Preview");
- DX = 0;
- DY = 0;
- Depth = 2;
- RenderMode = 0;
- CustomName[0] = 0;
- CustomDepth = 4;
- AntiAlias = FALSE;
- Integer = FALSE;
- GHelp = FALSE;
- UpdateParams(OZoom);
- break;
- case MM_LASTS:
- // Load settings from ENVARC:
- LoadSettings("ENVARC:TSMorph/TSMorph.prefs");
- break;
- case MM_RESTORE:
- // Load settings from ENV:
- LoadSettings("ENV:TSMorph/TSMorph.prefs");
- break;
- case MM_HELP:
- // Toggle Help?
- GHelp = !GHelp;
- SwitchMenuItem(MM_HELP,GHelp,TRUE);
- break;
- default:
- // something else ??
- break;
- }
- }
-
- /* Request a number from the user using reqtools.library
- * Parameters: title - title of requester
- * number - address of number to display and get
- * HelpNum - help key if help required
- */
- void
- GetANumber(char *title,ULONG *number,ULONG HelpNum) {
- ULONG ret = 2; // current gadget
- struct AmigaGuideMsg *agm; // amiga guide stuff
- ULONG signals; // signals to wait on
- struct rtHandlerInfo *rth; // reqtools stuff
- // disable all the windows
- DisableWindows(HelpNum);
- // loop until Ok or Cancel pressed
- while (ret == 2) {
- ret = CALL_HANDLER;
- if (rtGetLong(number,title,NULL,
- RT_ReqHandler, &rth,
- RT_Window, TSMorphWnd,
- RTGL_ShowDefault, TRUE,
- RT_Underscore, '_',
- RTGL_GadFmt, handle?"_OK|_Help|_Cancel":"_OK|_Cancel", // if amigaguide then help gadget
- TAG_END) == CALL_HANDLER) {
- while (ret == CALL_HANDLER) {
- if (!rth->DoNotWait) {
- // wait if possible
- signals = Wait(rth->WaitMask | ASig);
- }
- ret = rtReqHandlerA(rth,signals,NULL);
- if (ret == 2) {
- // display help if requested, 2 is only possible if help gadget is available
- help(HelpNum);
- }
- if (signals & ASig) {
- // do amigaguide stuff
- while (agm = GetAmigaGuideMsg(handle)) {
- ReplyAmigaGuideMsg(agm);
- }
- }
- }
- }
- }
- // re-enable all the windows
- EnableWindows();
- }
-
- /* Request a string from the user using reqtools.library
- * Parameters: title - title of requester
- * number - address of buffer to display and get
- * HelpNum - help key if help required
- * See GetANumber for comments
- */
- void
- GetAString(char *title,char *buffer,ULONG HelpNum) {
- ULONG ret = 2;
- struct AmigaGuideMsg *agm;
- ULONG signals;
- struct rtHandlerInfo *rth;
- DisableWindows(HelpNum);
- while (ret == 2) {
- ret = CALL_HANDLER;
- if (rtGetString(buffer,127,title,NULL,
- RT_ReqHandler, &rth,
- RT_Window, TSMorphWnd,
- RTGL_ShowDefault, TRUE,
- RT_Underscore, '_',
- RTGL_GadFmt, handle?"_OK|_Help|_Cancel":"_OK|_Cancel",
- RTGS_AllowEmpty, TRUE,
- TAG_END) == CALL_HANDLER) {
- while (ret == CALL_HANDLER) {
- if (!rth->DoNotWait) {
- signals = Wait(rth->WaitMask | ASig);
- }
- ret = rtReqHandlerA(rth,signals,NULL);
- if (ret == 2) {
- help(HelpNum);
- }
- if (signals & ASig) {
- while (agm = GetAmigaGuideMsg(handle)) {
- ReplyAmigaGuideMsg(agm);
- }
- }
- }
- }
- }
- EnableWindows();
- }
-
- /* Save the current settings
- * Parameters: filename - filename to save to
- * or NULL for requester
- */
- void
- SaveSettings(char *filename) {
- char *ifilename = NULL; // the actual file name
- BPTR fh; // file handle
- BOOL ok = TRUE; // Is it working?
- char buffer[65]; // buffer for records
- struct DiskObject *MyDiskObject; // The Icon
- // Disable all windows
- DisableWindows(DI_WaitSS);
- // if no file name supplied then request a name
- if (!filename) {
- if (GetAFile("TSMorph.prefs","Save Settings",FILF_SAVE)) {
- ifilename = TempFilename;
- }
- }
- else {
- ifilename = filename;
- }
- // if we now a file name
- if (ifilename) {
- // try and open the file
- if (fh = Open(ifilename,MODE_NEWFILE)) {
- // save all TSMorph settings
- FPuts(fh,";TSMorph parameters\n");
- FPuts(fh,"CREATEICONS=");
- FPuts(fh,CreateIcons?"YES\n":"NO\n");
- FPuts(fh,"CHANGEPALETTE=");
- FPuts(fh,(!PaletteAllowed)?"OFF\n":(palette?"YES\n":"NO\n"));
- FPuts(fh,"ZOOM=");
- FPuts(fh,(!ZoomAllowed)?"OFF\n":(Zoom?"YES\n":"NO\n"));
- FPuts(fh,"OPENMODE=");
- switch (OpenMode) {
- case OPEN_ILBM_IF_ILBM:
- FPuts(fh,"IFILBM\n");
- break;
- case OPEN_ILBM_ALWAYS:
- FPuts(fh,"ALWAYS\n");
- break;
- case OPEN_REMAP:
- FPuts(fh,"REMAP\n");
- break;
- case OPEN_OPAL:
- FPuts(fh,"OPAL\n");
- break;
- case OPEN_ILBM_IF_COLOURS:
- default:
- FPuts(fh,"IFCOLOURS\n");
- break;
- }
- if (*ScreenName) {
- FPuts(fh,"PUBSCREEN=");
- FPuts(fh,ScreenName);
- FPuts(fh,"\n");
- }
- else {
- FPuts(fh,";PUBSCREEN=\n");
- }
- if (*CustomName) {
- FPuts(fh,"CUSTOMMODE=");
- FPuts(fh,CustomName);
- FPuts(fh,"\n");
- }
- else {
- FPuts(fh,";CUSTOMMODE=\n");
- }
- sprintf(buffer,"CUSTOMDEPTH=%ld\n",CustomDepth);
- FPuts(fh,buffer);
- FPuts(fh,"PREVIEW=");
- FPuts(fh,PreviewScript);
- FPuts(fh,"\n");
- FPuts(fh,"HELP=");
- FPuts(fh,GHelp?"YES\n":"NO\n");
- // Save all prefs settings
- FPuts(fh,";Prefs parameters\n");
- FPuts(fh,"CREATEICONSP=");
- FPuts(fh,CreateIconsP?"YES\n":"NO\n");
- FPuts(fh,"KEEPSETTINGS=");
- FPuts(fh,KeepSettings?"YES\n":"NO\n");
- // Save all render settings
- FPuts(fh,";TSMorph-render parameters\n");
- FPuts(fh,"CREATEICONSR=");
- FPuts(fh,CreateIconsR?"YES\n":"NO\n");
- sprintf(buffer,"DX=%ld\n",DX);
- FPuts(fh,buffer);
- sprintf(buffer,"DY=%ld\n",DY);
- FPuts(fh,buffer);
- FPuts(fh,"LOADSCRIPT=");
- FPuts(fh,LoadScript);
- FPuts(fh,"\n");
- FPuts(fh,"PRESCRIPT=");
- FPuts(fh,PreScript);
- FPuts(fh,"\n");
- FPuts(fh,"POSTSCRIPT=");
- FPuts(fh,PostScript);
- FPuts(fh,"\n");
- sprintf(buffer,"DEPTH=%ld\n",Depth);
- FPuts(fh,buffer);
- sprintf(buffer,"MODE=%ld\n",RenderMode);
- FPuts(fh,buffer);
- FPuts(fh,"SAVEFORMAT=");
- switch (SaveFormat) {
- case MI_OPAL24:
- FPuts(fh,"OPAL24\n");
- break;
- case MI_OPAL24T:
- FPuts(fh,"OPAL24T\n");
- break;
- case MI_OPAL24F:
- FPuts(fh,"OPAL24F\n");
- break;
- case MI_OPAL24FT:
- FPuts(fh,"OPAL24FT\n");
- break;
- case MI_JPEG:
- FPuts(fh,"JPEG\n");
- break;
- case MI_JPEGT:
- FPuts(fh,"JPEGT\n");
- break;
- case MI_PBM:
- FPuts(fh,"PPM\n");
- break;
- case MI_BW16:
- FPuts(fh,"BW16\n");
- break;
- case MI_BW256:
- FPuts(fh,"BW256\n");
- break;
- case MI_HAM6:
- FPuts(fh,"HAM6\n");
- break;
- case MI_HAM8:
- FPuts(fh,"HAM8\n");
- break;
- case MI_DCTV3:
- FPuts(fh,"DCTV3\n");
- break;
- case MI_DCTV4:
- FPuts(fh,"DCTV4\n");
- break;
- case MI_ILBM24:
- default:
- FPuts(fh,"ILBM24\n");
- break;
- }
- sprintf(buffer,"QUALITY=%ld\n",Quality);
- FPuts(fh,buffer);
- if (*ScreenNameR) {
- FPuts(fh,"PUBSCREENR=");
- FPuts(fh,ScreenNameR);
- FPuts(fh,"\n");
- }
- else {
- FPuts(fh,";PUBSCREENR=\n");
- }
- FPuts(fh,"ANTIALIAS=");
- FPuts(fh,AntiAlias?"YES\n":"NO\n");
- FPuts(fh,"INTEGER=");
- FPuts(fh,Integer?"YES\n":"NO\n");
- // If want to save prefs Icon
- if (CreateIconsP) {
- if (MyDiskObject = GetDiskObject(ifilename)) {
- // Icon already present so do not overwrite
- FreeDiskObject(MyDiskObject);
- }
- else {
- // Try and get an icon and write it
- if ((MyDiskObject = GetDiskObject("ENV:TSMorph/def_prefs")) ||
- (MyDiskObject = GetDiskObject("ENV:SYS/def_prefs")) ||
- (MyDiskObject = GetDefDiskObject(WBPROJECT))) {
- PutDiskObject(ifilename,MyDiskObject);
- FreeDiskObject(MyDiskObject);
- }
- }
- }
- // try and close the file
- if (!Close(fh)) {
- ok = FALSE;
- }
- }
- else {
- ok = FALSE;
- }
- }
- // enable the windows and display error if required
- EnableWindows();
- if (!ok) {
- Error("Error Saving Settings '%s'","OK",ifilename,HE_SaveSettings);
- }
- }
-
- /* Load the current settings
- * Parameters: filename - filename to load from
- * or NULL for requester
- */
- void
- LoadSettings(char *filename) {
- BPTR fh; // file handle
- int kount = 0; // count of lines
- int kount1 = 0; // index
- BOOL ok = TRUE; // Still ok?
- char string[65]; // record buffer
- char *ifilename = NULL; // actual filename
- // if no file name then show requester
- if (!filename) {
- if (GetAFile("TSMorph.prefs","Load Settings",0)) {
- ifilename = TempFilename;
- }
- }
- else {
- ifilename = filename;
- }
- // if we now have a file name...
- // see Args.c MyArgArrayInit() for more info
- if (ifilename) {
- if (ArgArraySettings) {
- FreeVec(ArgArraySettings);
- ArgArraySettings = NULL;
- }
- if (fh = Open(ifilename,MODE_OLDFILE)) {
- // If we have found a file the relevant lines
- while (FGets(fh,string,64)) {
- if ((string[0] != '\n') &&
- (string[0] != ';')) {
- ++kount;
- }
- }
- Close(fh);
- if (fh = Open(ifilename,MODE_OLDFILE)) {
- // Allocate memory for settings from file pointers
- if (ArgArraySettings = AllocVec((kount+1) * sizeof(UBYTE *),MEMF_CLEAR)) {
- // Read in all settings
- while (FGets(fh,string,64) &&
- (kount1 < kount)) {
- // remove newline
- string[strlen(string)-1] = '\0';
- // ignore blank and comment lines
- if (string[0] && (string[0]!=';')) {
- // Clone settings in memory
- ArgArraySettings[kount1] = strdup(string);
- ++kount1;
- }
- }
- // reset up the new settings
- InitParams(TRUE);
- }
- else {
- ok = FALSE;
- }
- Close(fh);
- }
- else {
- ok=FALSE;
- }
- }
- else {
- ok=FALSE;
- }
- }
- if (!ok) {
- Error("Error Loading Settings '%s'","OK",ifilename,HE_LoadSettings);
- }
- }
-